#pragma once

#include <string>
#include "IRenderer.h"

using std::string;

class Model;
typedef SmartPtr<Model> ModelPtr;

class Model
{
public:
	enum eTransfromType
	{
		WORLD_FRAME,
		MODEL_FRAME,
	};

public:
	Model();

	virtual void render(RendererPtr renderer) = 0;

	virtual void translate(float x = 0.0f, float y = 0.0f, float z = 0.0f);

	virtual void scale(float x = 1.0f, float y = 1.0f, float z= 1.0f);

	virtual void rotate(float x = 0.0f, float y = 0.0f, float z = 0.0f);

	virtual Vec3 getPosition();

protected:
	Mat4 _translations;	
	Mat4 _rotations;

	Mat4 _transform;

	CvarPtr _transformType;
};